// 核心：替换参数HTML字符串中的EJS语法并返回

// 为什么export default函数，而不是直接export default对象？若是对象则无法传入形参options则无法进行配置，使用函数更加灵活
export default (
  options = {
    inject: { // 更多配置就不再给出实现，请前往github查看
      data: {}
    },
  }
) => {
  return {
    name: 'my-vite-plugin-html',
    // transformIndexHtml是Vite的钩子函数，转换index.html的专用钩子，返回值为最终展示的index.html字符串
    transformIndexHtml: {
      order: 'pre', // 修改插件执行顺序
      handler: (html, ctx) => { // 参数html表示HTML字符串，参数ctx表示转换上下文
        return html.replace(/<%= (.*) %>/g, (match, args) => {
          return options.inject.data[args.trim()];
        });
      }
    }
  };
}